大约 2 分钟
JetPack Compose 开发心得
Compose只是一个Kotlin实现的特定领域语言DSL,用于取代XML进行UI的刻画语言。利用了Kotlin的几个语法特性:
函数显式参数列表
用于定义控件的参数。
lambda表达式写在{}里,作为参数时可以独立在括号外
用于定义控件的嵌套结构。并提供了独立的作用域
Compose最主要的特性的可组合性来源于它的本质:函数。由于UI实现方式是函数调用,写Compose语言的操作为定义函数、定义函数调用。所有特性都跟函数的调用有关,包括闭包、状态等等。Compose的其他特性如重组等都离不开函数的本质
Compose由于都是函数,所以需要状态来维护
val mutableState = remember { mutableStateOf(default) }
var value by remember { mutableStateOf(default) }
val (value, setValue) = remember { mutableStateOf(default) }
//Compose 附带一些可以根据 Android 应用中使用的常见可观察类型创建 State 的函数:
//LiveData
val index:LiveData<Int> = MutableLiveData(0)
val index2 by index.observeAsState(0)
//Flow
val value: Int by flow.collectAsState(0)
//RxJava2
Compose的页面由函数组合实现,因此没有Fragment。不需要去调控Activity的生命周期。类Fragment的实现方式为定义一系列的navigation、paging,然后实现各个page。
首先定义一个NavHost,下辖页面的定义调用。
还需要定义接受NavController的Action,用于翻页操作。各个page要接收action参数。
Compose的模式为M-V-VM。M(Model)由一个逻辑类实现,V(View)由定义一个Composable的函数实现,VM(ViewModel)由定义一个ViewModel类实现。
文件结构为,每个子文件夹为一个页面,由3个文件组成,分别为M、V、VM。
Compose的模式也有M-V-I。M为所有的View,V为,I为意图内容
Compose其实应该用类的构造函数来进行组合才对!因为属性!Compose的属性没有一个类的接口来规范,写得很烦躁。这就是函数没有继承导致的恶果。